package com.dkm.orproject.dkmoa.service.serviceimpl;

import com.dkm.orproject.dkmoa.dao.OaInformMapper;
import com.dkm.orproject.dkmoa.dao.OaMessageMapper;
import com.dkm.orproject.dkmoa.dao.OaVoteOptionMapper;
import com.dkm.orproject.dkmoa.dao.OaVoteOptionPersonnelMapper;
import com.dkm.orproject.dkmoa.domain.*;
import com.dkm.orproject.dkmoa.service.OaVoteOptionService;
import com.dkm.orproject.utils.utils.IdToobtainUtils;
import com.github.pagehelper.PageHelper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;

/**
 * @ClassName : OaVoteOptionServiceImpl  //类名
 * @Description : 投票选项服务接口实现类  //描述
 * @Author : 易嵘  //作者
 * @Date: 2020-11-26 10:59  //时间
 */
@Service
@Transactional(rollbackFor = Exception.class)
public class OaVoteOptionServiceImpl implements OaVoteOptionService {

    /**
     * 投票选项Mapper
     */
    @Resource
    OaVoteOptionMapper voteOptionMapper;

    /**
     * 投票选项关联人员
     */
    @Resource
    OaVoteOptionPersonnelMapper voteOptionPersonnelMapper;

    /**
     * 通知Mapper
     */
    @Resource
    OaMessageMapper messageMapper;

    /**
     * 通知关联Mapper
     */
    @Resource
    OaInformMapper informMapper;

    /**
     * id工具类
     */
    @Resource
    IdToobtainUtils idToobtainUtils;

    /**
     * 人员选项查询
     * @param voteOptionName 人员选项名称
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param page 当前页数
     * @param limit 显示行数
     * @return 查询结果
     */
    @Override
    public List<OaVoteOption> findAll(String voteOptionName, String startTime, String endTime, Integer page, Integer limit) {
        PageHelper.startPage(page,limit);
        return voteOptionMapper.findAll(voteOptionName,startTime,endTime);
    }

    /**
     * 总行数
     * @param voteOptionName 人员选项名称
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 总行数
     */
    @Override
    public Long rowCount(String voteOptionName, String startTime, String endTime) {
        return voteOptionMapper.rowCount(voteOptionName,startTime,endTime);
    }

    /**
     * id查询
     * @param id 投票选项id
     * @return 投票选项对象
     */
    @Override
    public OaVoteOption selectByPrimaryKey(Long id) {
        return voteOptionMapper.selectByPrimaryKey(id);
    }

    /**
     * id删除
     * @param id 投票选项id
     * @return 回调函数
     */
    @Override
    public int deleteByPrimaryKey(Long id) {
        return voteOptionMapper.deleteByPrimaryKey(id);
    }

    /**
     * 批量查询
     * @param list 投票选项id集合
     * @return 查询结果
     */
    @Override
    public List<OaVoteOption> selectAll(List<Long> list) {
        return voteOptionMapper.selectAll(list);
    }

    /**
     * 批量删除
     * @param list 投票选项id集合
     * @return 回调函数
     */
    @Override
    public int deleteAll(List<Long> list) {
        return voteOptionMapper.deleteAll(list);
    }

    /**
     * 投票选项新增
     * @param voteOption 投票选项对象
     * @param personnelName 创建人名称
     * @return 回调函数
     */
    @Override
    public int add(OaVoteOption voteOption, String personnelName) {
        voteOption.setPkVoteOptionId(idToobtainUtils.getNumberId());
        voteOption.setCreatedBy(personnelName);
        voteOption.setIsRevision("1");
        return voteOptionMapper.insertSelective(voteOption);
    }

    /**
     * 修改
     * @param voteOption 投票选项对象
     * @return 回调函数
     */
    @Override
    public int updateByPrimaryKeySelective(OaVoteOption voteOption) {
        return voteOptionMapper.updateByPrimaryKeySelective(voteOption);
    }

    /**
     * 新增投票
     * @param voteOptionId 投票选项id
     * @param personnel 操作人
     * @return 回调函数
     */
    @Override
    public int addVote(Long voteOptionId, OaPersonnel personnel) {
        //查询投票选项
        OaVoteOption voteOption=voteOptionMapper.selectByPrimaryKey(voteOptionId);
        //查询对应通知
        OaMessage message=messageMapper.selectByForm(voteOption.getVoteId());
        //修改通知为已读
        informMapper.updatedInform(message.getPkMessageId(),personnel.getPkPersonnelId());

        //投票选项关联人员
        OaVoteOptionPersonnel voteOptionPersonnel = new OaVoteOptionPersonnel();
        //投票选项关联人员id
        voteOptionPersonnel.setPkVoteOptionPersonnelId(idToobtainUtils.getNumberId());
        //人员id
        voteOptionPersonnel.setPersonnelId(personnel.getPkPersonnelId());
        //投票id
        voteOptionPersonnel.setVoteOptionId(voteOptionId);
        //新增投票关联人员
        return voteOptionPersonnelMapper.insertSelective(voteOptionPersonnel);
    }
}
